/*
 * Copyright (c) 2025 Huawei Device, Inc. Ltd. and <马弓手>.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "Permissions.h"
#include "cJSON.h"

REGISTER_PLUGIN_CLASS(Permissions)
bool Permissions::execute(const string&  action, cJSON* args, CallbackContext cbc)
{
    if(action == "onArKTsResult") {
        return onArKTsResult(args);
    }
    
    if(action == "checkPermission") {
        m_cbc = cbc;
        cJSON* pJson = cJSON_GetArrayItem(args, 0);
        char* pStrJson = cJSON_Print(pJson);
        executeArkTs("./Permission/PermissionAction/HarmonyPermission", 0, pStrJson, "Permissions", cbc);
        free(pStrJson);
    } else if(action == "requestPermission") {
        m_cbc = cbc;
        cJSON* pJson = cJSON_GetArrayItem(args, 0);
        string strValue = pJson->valuestring;
        executeArkTs("./Permission/PermissionAction/HarmonyPermission", 1, strValue.c_str(), "Permissions", cbc);
    } else if(action == "requestPermissions") {
        m_cbc = cbc;
        char* pStrJson = cJSON_Print(args);
        executeArkTs("./Permission/PermissionAction/HarmonyPermission", 2, pStrJson, "Permissions", cbc);
        free(pStrJson);
    }
    return true;
}

bool Permissions::onArKTsResult(cJSON* args)
{
    string content = cJSON_GetObjectItem(args, "content")->valuestring;
    cJSON* json = cJSON_GetObjectItem(args, "result");
    if(json != NULL && json->type == cJSON_Array) {
        cJSON* pStrResult = cJSON_GetArrayItem(json, 0);
        bool isGrantStatus = true;
        if(pStrResult->valuestring == "false") {
            isGrantStatus = false;
        }
        cJSON* pRetJson = cJSON_CreateObject();
        cJSON_AddBoolToObject(pRetJson, "hasPermission", isGrantStatus);
        PluginResult pluginResult(PluginResult::Status::OK, pRetJson);
        m_cbc.sendPluginResult(pluginResult);
        cJSON_Delete(pRetJson);
    }
    return true;
}